{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "90abd475",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.model_selection import StratifiedShuffleSplit, GridSearchCV,cross_val_score,train_test_split\n",
    "from sklearn import metrics\n",
    "\n",
    "# 解决坐标轴刻度负号乱码\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "# 解决中文乱码\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']\n",
    "\n",
    "plt.style.use('ggplot')\n",
    "# 显示绘图结果\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "da513c88",
   "metadata": {},
   "source": [
    "# 0、导入数据,预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "423433dd",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>电量趋势下降指标</th>\n",
       "      <th>线损指标</th>\n",
       "      <th>告警类指标</th>\n",
       "      <th>是否窃漏电</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>286</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>287</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>288</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>289</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>290</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>291 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     电量趋势下降指标  线损指标  告警类指标  是否窃漏电\n",
       "0           4     1      1      1\n",
       "1           4     0      4      1\n",
       "2           2     1      1      1\n",
       "3           9     0      0      0\n",
       "4           3     1      0      0\n",
       "..        ...   ...    ...    ...\n",
       "286         4     1      2      0\n",
       "287         1     0      2      0\n",
       "288         5     1      2      1\n",
       "289         2     1      0      0\n",
       "290         4     1      0      0\n",
       "\n",
       "[291 rows x 4 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df1 = pd.read_excel('./data/dataset.xls')\n",
    "df1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "4662e32b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    251\n",
       "1     40\n",
       "Name: 是否窃漏电, dtype: int64"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df1.iloc[:,-1].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "b6dd9ef6",
   "metadata": {},
   "outputs": [],
   "source": [
    "# sk-learn会把y=0的类当作正样本计算。与我们的数据相反。需要对最后一列数据进行处理。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "f50c411d",
   "metadata": {},
   "outputs": [],
   "source": [
    "df = df1.copy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "33bc697f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1    251\n",
       "0     40\n",
       "Name: 是否窃漏电, dtype: int64"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_label = df.columns[-1]\n",
    "df[y_label] = df[y_label].apply(lambda x : (1-x))\n",
    "df[y_label].value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aace3f0d",
   "metadata": {},
   "source": [
    "# 1、数据划分 取30%做测试样本，剩下做训练样本"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "b35c8be1",
   "metadata": {},
   "outputs": [],
   "source": [
    "X,Y = df.iloc[:,:-1],df.iloc[:,-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "e2abfaa3",
   "metadata": {},
   "outputs": [],
   "source": [
    "# random_stateint, RandomState instance or None, default=None\n",
    "# Controls the shuffling applied to the data before applying the split. \n",
    "# Pass an int for reproducible output across multiple function calls.\n",
    "Xtrain, Xtest,Ytrain,Ytest = train_test_split(X,Y, test_size = 0.3,random_state= 420)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9a2a4efd",
   "metadata": {},
   "source": [
    "# 2、使用CART决策树（分类树）进行建模"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "7c276d92",
   "metadata": {},
   "outputs": [],
   "source": [
    "# sk-learn 使用 基尼系数 对不纯度进行计算\n",
    "cart = DecisionTreeClassifier(criterion='gini')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "7a2b732e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeClassifier()"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cart.fit(Xtrain,Ytrain)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "f87c1887",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9090909090909091"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cart.score(Xtest,Ytest)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "1368a9fc",
   "metadata": {},
   "outputs": [],
   "source": [
    "y_test_pre = cart.predict(Xtest)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "284931f9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9090909090909091"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# sk-learn 使用  对不纯度进行计算\n",
    "cart_entropy = DecisionTreeClassifier(criterion='entropy')\n",
    "cart_entropy.fit(Xtrain,Ytrain)\n",
    "cart_entropy.score(Xtest,Ytest)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b71c7ca8",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "072fd3b2",
   "metadata": {},
   "source": [
    "### 使用 gini 和 entropy 两种划分准则差距不大，这里使用 gini"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dff463ec",
   "metadata": {},
   "source": [
    "# 3、生成混淆矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "7b9de3f7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 4,  4],\n",
       "       [ 4, 76]])"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "metrics.confusion_matrix(Ytest,y_test_pre)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "58504fb6",
   "metadata": {},
   "source": [
    "# 4、计算预测准确率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "c61c19da",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9090909090909091"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "metrics.accuracy_score(Ytest,y_test_pre)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d28133a6",
   "metadata": {},
   "source": [
    "# 5、进行交叉验证"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f6d5a413",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 第一种是简单交叉验证，所谓的简单，是和其他交叉验证方法相对而言的。首先，我们随机的将样本数据分为两部分\n",
    "#（比如： 70%的训练集，30%的测试集），然后用训练集来训练模型，在测试集上验证模型及参数。接着，我们再把样本打乱，\n",
    "# 重新选择训练集和测试集，继续训练数据和检验模型。最后我们选择损失函数评估最优的模型和参数。　\n",
    "\n",
    "# 第二种是S折交叉验证（S-Folder Cross Validation）。和第一种方法不同，S折交叉验证会把样本数据随机的分成S份，\n",
    "# 每次随机的选择S-1份作为训练集，剩下的1份做测试集。当这一轮完成后，重新随机选择S-1份来训练数据。若干轮（小于S）之后，\n",
    "# 选择损失函数评估最优的模型和参数。\n",
    "\n",
    "# 第三种是留一交叉验证（Leave-one-out Cross Validation），它是第二种情况的特例，此时S等于样本数N，这样对于N个样本，\n",
    "# 每次选择N-1个样本来训练数据，留一个样本来验证模型预测的好坏。此方法主要用于样本量非常少的情况，比如对于普通适中问题，\n",
    "# N小于50时，我一般采用留一交叉验证。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "450ee999",
   "metadata": {},
   "source": [
    "## 调参 max_depth"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "eade8d90",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最优参数以及最高得分: [4.         0.92727273]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1440x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ScoreAll = []\n",
    "cv = StratifiedShuffleSplit(n_splits=10, test_size=0.3, random_state=42)\n",
    "for i in range(3, 15):\n",
    "    clf = DecisionTreeClassifier(criterion='gini', max_depth=i, random_state=42)\n",
    "    score = cross_val_score(clf, X, Y, cv=cv).mean()\n",
    "    ScoreAll.append([i, score])\n",
    "ScoreAll = np.array(ScoreAll)\n",
    "\n",
    "max_score = np.where(ScoreAll == np.max(ScoreAll[:, 1]))[0][0]  # 找出最高得分对应的索引\n",
    "print(\"最优参数以及最高得分:\", ScoreAll[max_score])\n",
    "plt.figure(figsize=[20, 5])\n",
    "plt.plot(ScoreAll[:, 0], ScoreAll[:, 1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0d6b0507",
   "metadata": {},
   "source": [
    "可以看出这里最优的 max_depth 为4"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "63d435a5",
   "metadata": {},
   "source": [
    "## 调参 min_samples_split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "58fa09ae",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最优参数以及最高得分: [10.          0.91931818]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1440x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ScoreAll = []\n",
    "cv = StratifiedShuffleSplit(n_splits=10, test_size=0.3, random_state=42)\n",
    "for i in range(5, 15):\n",
    "    clf = DecisionTreeClassifier(criterion='gini', max_depth=9, min_samples_split=i, random_state=42)\n",
    "    score = cross_val_score(clf, X, Y, cv=cv).mean()\n",
    "    ScoreAll.append([i, score])\n",
    "ScoreAll = np.array(ScoreAll)\n",
    "\n",
    "max_score = np.where(ScoreAll == np.max(ScoreAll[:, 1]))[0][0]  # 找出最高得分对应的索引\n",
    "print(\"最优参数以及最高得分:\", ScoreAll[max_score])\n",
    "plt.figure(figsize=[20, 5])\n",
    "plt.plot(ScoreAll[:, 0], ScoreAll[:, 1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7b0aa60d",
   "metadata": {},
   "source": [
    "可以看出这里最优的 min_samples_split 为 10"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3dabaa7c",
   "metadata": {},
   "source": [
    "## 调参 min_samples_leaf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "id": "c717fcae",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最优参数以及最高得分: [5.         0.93333333]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1440x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ScoreAll = []\n",
    "cv = StratifiedShuffleSplit(n_splits=10, test_size=0.1, random_state=42)\n",
    "for i in range(5, 15):\n",
    "    clf = DecisionTreeClassifier(criterion='gini', min_samples_leaf=i, max_depth=7, min_samples_split=5, random_state=42)\n",
    "    score = cross_val_score(clf, X, Y, cv=cv).mean()\n",
    "    ScoreAll.append([i, score])\n",
    "ScoreAll = np.array(ScoreAll)\n",
    "\n",
    "max_score = np.where(ScoreAll == np.max(ScoreAll[:, 1]))[0][0]  # 找出最高得分对应的索引\n",
    "print(\"最优参数以及最高得分:\", ScoreAll[max_score])\n",
    "plt.figure(figsize=[20, 5])\n",
    "plt.plot(ScoreAll[:, 0], ScoreAll[:, 1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "58a14a64",
   "metadata": {},
   "outputs": [],
   "source": [
    "可以看出这里最优的 min_samples_leaf 为5"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9d516016",
   "metadata": {},
   "source": [
    "## 联动调参"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "id": "166ab2ba",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'max_depth': 3, 'min_samples_leaf': 4, 'min_samples_split': 2}\n",
      "0.9295454545454545\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedShuffleSplit(n_splits=10, random_state=42, test_size=0.3,\n",
       "            train_size=None),\n",
       "             estimator=DecisionTreeClassifier(random_state=42),\n",
       "             param_grid={'max_depth': array([2, 3, 4, 5, 6, 7, 8, 9]),\n",
       "                         'min_samples_leaf': array([1, 2, 3, 4, 5, 6, 7]),\n",
       "                         'min_samples_split': array([ 2,  3,  4,  5,  6,  7,  8,  9, 10, 11])})"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cv = StratifiedShuffleSplit(n_splits=10, test_size=0.3, random_state=42)\n",
    "param_grid = {\n",
    "    'max_depth': np.arange(2, 10),\n",
    "    'min_samples_leaf': np.arange(1, 8),\n",
    "    'min_samples_split': np.arange(2, 12)}\n",
    "\n",
    "clf = DecisionTreeClassifier(criterion='gini', random_state=42)\n",
    "GS = GridSearchCV(clf, param_grid, cv=cv)\n",
    "GS.fit(X, Y)\n",
    "print(GS.best_params_)\n",
    "print(GS.best_score_)\n",
    "GS"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "23c0aed7",
   "metadata": {},
   "source": [
    "## 使用最优参数进行训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "id": "be62b296",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeClassifier(class_weight='balanced', max_depth=3, min_samples_leaf=4)"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "best_cart = DecisionTreeClassifier(max_depth=3,min_samples_leaf=4,min_samples_split=2, class_weight='balanced')\n",
    "best_cart.fit(Xtrain, Ytrain)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "31de0b91",
   "metadata": {},
   "source": [
    "# 6、ROC曲线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "id": "d0743cf2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([0.   , 0.25 , 0.375, 0.5  , 0.5  , 0.625, 1.   ]),\n",
       " array([0.    , 0.0875, 0.775 , 0.9375, 0.95  , 0.9625, 1.    ]),\n",
       " array([2.        , 1.        , 0.92123445, 0.59188544, 0.15763547,\n",
       "        0.07233273, 0.        ]))"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fpr, tpr, thresholds = metrics.roc_curve(Ytest, best_cart.predict_proba(Xtest)[:, 1])\n",
    "fpr, tpr, thresholds"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "id": "e93d61be",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEFCAYAAADuT+DpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAjA0lEQVR4nO3de3xdVZ338c9O09D0Cm1a25RS20IvtFJABxlBgQr1QhFl9KeDtd7xxTiOo4M8w4wyiJdHkRkfQRytozIq6vyeMqMjjo84gKMgXlNaE1sKqVgKFhqKbZNek7OeP/Zum6bJyU569tk553zfr1de3Wefdfb5rZx0/c5ea++1ohACIiJSu+ryDkBERPKlRCAiUuOUCEREapwSgYhIjVMiEBGpcfV5BzAMusxJRGR4ov52VmIi4MknnxzW65qamujo6ChxNCOb6lwbVOfacDx1bm5uHvA5dQ2JiNQ4JQIRkRqnRCAiUuOUCEREapwSgYhIjVMiEBGpcZlfPmpmo4F/d/fLBnh+DLAGmAWsB1a5u+4VEBEpk0wTgZk1Aj8H5hcpthLY6u4rzOwu4BLg7izjEhEZaUIIcOAA7OmEPV3Jv52EQ9tdnew/+xw4eV7J3zvTRODue4EzzOzRIsWWAXcm2/cCF9EnEZjZVcBVyTFpamoaVjz19fXDfm2lUp1rg+o8MoRCgbCnk9DVSaFzN4Wu3YSu3RQ6dxM6k+2u3YefP/y4czeFrk7oPlj0+N0nNNB05gtLHvdIuLN4CrAz2d4FLOhbwN1XA6uTh2G4d9bpTsTaoDrXhqzqHA4ehL2d0NV1+Nt5SL6dH/mmnuzr6oS9XfG/e7pg3x4otthXVAfjxkHjOBg7HsaOI5o+C8aNJ2ocB+PGH9mf/Bs/Hg+NYxk3fXomdxaPhETQAUxKticlj0VEhiWEAPv3HtWQx10sRzfkJN/cj2rI93bG3TPFNDRA46FGehxMmkzUfErcuBdryMeOgzGNRFG/0/3kaiQkgnuA5cTdQ8uAT+cbjojkLfT0HNto9+o3Z08XuwrdFJ7pIBxuyJNGfU8XFArF36Bx3JGGfOx4mHHyMd/IGTueqG9DPnYc0eiG8vwSyqisicDM5gDvdvdreu2+A7jCzNYD64gTg4hUsP4HPvvpYunqjBvyo/Z1xd/oixlVz/7xEwhjxsYN9ISJRNNmpGjIx0NjI1HdqPL8IipEVIGL1wfNPpqe6lwbsqhzKBRg754BGvOjv52HPo07e7ugu7v4G5zQeORb+bjx0NinO+XQvj6NO2PHQ0MDU6dO1ec8BMkYQfVMQy0i6Qw88JmiId+bYuCzd/fK2HFEJzUd05Azbnyf/vJ4sDSqV/MzUuiTEBnBjhr47NWg9+0v39lzkJ5ndxzdkO9JMfA5uuGo/m8mTSaaMWvwhnzs+BE78ClDp0QgkrHQ03OkYU4a9NDnipZi39bTDHwemDARThgTN9DTZ8YNd6+G/Oj+8l7f4Ktw4FOGTolApARCTw9hze2Ejm3HNuT7Bhv4HHX0gOa48URTp6doyI8MfNbiuIiUjhKBSCls30b47+/A5KkwZSpMmUY0a+4x3SlRn8adseOg4QR1sUiulAhESii6YhV1L7wg7zBEhkTTUIscpxAC4Vf3A6jPXSqSzghEjkPoPkj4+j8THvhvohecD897Qd4hiQyZEoHIMIWu3RT++RPw8G+IVryB6LI3ENXpJFsqjxKByDCEbU9QuPUjsONpore/n7pzL8w7JJFhUyIQGaKwYR2Fz38CRtVT9zcfIzp1Ud4hiRwXJQKRISj85G7CHf8M05qpe8+H4uv9RSqcEoFICqHQQ7jzXwl3fxuWnE3dOz8Q3+AlUgWUCEQGEfbtpfAv/wjrfkG0bAWRvZ1olKYxluqhRCBSRNixncKtH4Unf0905buou+jSvEMSKTklApEBhN9tonDbx+DAfurecz3RkrPzDkkkE0oEIv0Iv7qfwpf/D0w8kbr3fYRo5il5hySSGSUCkV5CCIT/+r+Eb38dTl1E3V/8HdGESXmHJZIpJQKRRDh4kPDVWwk/+xHRuRcSrXoP0ejReYclkjklAhEg7N5J4XMfh0c3EL16JdErX6epoaVmKBFIzQtPbomni9j5LHXvujaePE6khigRSE0LrS0UVt8Eoxuo+8DHiebMzzskkbJTIpCaVbjvvwjfWg3Ns6n7yw8STZmad0giuVAikJoTenoI/iXCvXfB0nOoe8ffEI1pzDsskdwoEUhNCXu6KHzxU9DaQrT81UR/9maiOk0XIbVNiUBqRti+jcJnPwpPPUH0pndT95KX5R2SyIigRCA1ITy6Ib48tKebuvfeQLRoad4hiYwYSgRS9Qo//x/C7bfA5KZ4DYHpJ+cdksiIokQgVSsUCoTvfpNw17/B/CXUXf23ROMn5h2WyIijRCBVKRzYT/jKZwi/up/ovIuJVl5NVK/pIkT6o0QgVafn2Wco3Pz38NgjRK99C9Hy12i6CJEiMk0EZjYGWAPMAtYDq9w99CkzDvgG0AQ84O7XZhmTVLew9XfsuO3jsOuP1F19HdFZ5+YdksiIV5fx8VcCW919KXAScEk/Zd4I/MzdzwMWm9mijGOSKhXW/5LCJ/4WCj3UXfsJJQGRlLJOBMuAHybb9wIX9VNmPzDWzCJgDHAg45ikyoQQKPzwOxQ++zGYPpPJN32JaPa8vMMSqRhZjxFMAXYm27uABf2U+QbwIPA64B53b+9bwMyuAq4CcHeampqGFUx9ff2wX1upqr3Oobub3V/8R/be/R1OOPdCJv319YweN56m7u68Qyurav+c+6M6l/C4JT/i0TqAQ8s7TUoe93Ud8Hl3/xcz+6aZvcjdf9q7gLuvBlYnD0NHR3+HGVxTUxPDfW2lquY6h65OCl/4JGxYR/SK13Lw1St5ZncnTSeMqdo6D6SaP+eBqM5D09zcPOBzWXcN3QMsT7aXAff1U2YCsC/Z3g+MzzgmqQLh6ScpfOIDsKmN6K3vpe6KVUR1Wf85i1SnrP/n3AHMNLP1wA6g3cxu7lPmNuBqM3sQaCROHiIDCptaKXz8A7B7F3Xvv5G6F70075BEKlqmXUPuvh9Y0Wf3NX3KPAacl2UcUj3C03+g8E/Xw9Tp8XQR02bkHZJIxdMNZVJRwkM/TyaO+weipufkHY5IVVCnqlSU0NYCM2YpCYiUUKozAjNrAj4InAasAr4AvM/dH88wNpGjhP3748HhC1+ZdygiVSXtGcE3gT8CLwCeBX5KPBAsUj6bWqH7INGSs/OORKSqpE0Ep7v7DUDB3Qvu/k/AwuzCEjlWaGuB0Q1w2ul5hyJSVdIOFreY2TvhcDfR1cAvM4tKpB+hrQUWLCFqOCHvUESqStozgrcDLwVGAxuBJcDbsgpKpK+wfRtse4JosbqFREot1RmBuz8NvCHjWEQGFNrWAmh8QCQDqc4IzOziPo+bzOyWbEISOVZoWwtTpsFzZuYdikjVSds19I3eD9y9A7iy9OGIHCt0H4SN64gWn62VxkQyULRryMxWJZtjem0DzAG2ZBaVSG/tD8O+veoWEsnIYGMEhxaSqefoRWU6gCsyiUikj9DWAqNGwcIz8g5FpCoVTQTu/lYAM1txaFuk3EJbC8xbSNQ4Nu9QRKpS2jGCl2UahcgAwq5nYctmXTYqkqG0N5Q9ZGYvB6b12jff3T+YQUwih4W2hwCUCEQylDYRfBOYCJwLfAe4BN1ZLOXQ2gITJsGsOXlHIlK10nYNXeDurwC+C9xCnAhOzCooEYBQKBB+uza+bFTLUIpkJu3/ru1m9krgJ8Arga3A8zKLSgRgSzt07oLFZ+UdiUhVS5sIrgJeA/wb8Y1kTwFrsgpKBCC0tkAUESkRiGQq7VxDDwIPApjZYmCyuz+TZWAioa0FTplHNGFS3qGIVLUBE4GZnUS8KtkC4hlHP+rufwRGAcvN7N3ufn5ZopSaE/Z0wuaHiV7+2rxDEal6xc4IvgzsAb4EXAZ808x+BbwDaAVuyj48qVkb1kOhoGklRMqgWCJ4CfAcd+82s7uAXcDvgJe6+2/LEp3UrNDWAo3jYO6CvEMRqXrFEkGPu3cDuPtBM3vW3f+iTHFJDQshxIlg0RlEo0blHY5I1SuWCJrM7Mlej6f1ehwBwd2bswtNatYfHocdHUSXvj7vSERqQrFEoFs5JRehtQXQtBIi5TJgInD335czEJFDQttamDGLaMrUvEMRqQm6b19GlLB/P2xq1dmASBkpEcjIsqkVug/qslGRMlIikBEltLXA6AY47fS8QxGpGUoEMqKEthZYsISo4YS8QxGpGUoEMmKEjqdg2xMaHxAps1STzpnZGOBdwELgOuI5iG50910pXrcGmAWsB1a5e+in3LXE01h0Ape7+4GhVEKqQ2hbC+iyUZFyS3tG8DXgTODPgC5gNHBHitetBLa6+1LgJOIFbY5iZnOBxe7+YuD7wMkpY5IqE1pbYMo0mD4z71BEakrapSrPc/dmM/uDux8E3mtmT6V43TLgzmT7XuAi4O4+ZV4KnGRmPyZe5+DWvgcxs6uI10TA3WlqakoZ9tHq6+uH/dpKVSl1Dt3dbH94PWNevJyJU4/v/oFKqXMpqc61Ias6p00Ej5jZJUAAMLNVwKYUr5sC7Ey2dxFPad3XVGC7u7/KzB4EzideCe0wd18NrE4eho6OjpRhH62pqYnhvrZSVUqdw6ZWwt497J+36LjjrZQ6l5LqXBuOp87NzQPPCJQ2EbyduHvoOWbWCbQRd/sMpgM4tKrIpORxX7uAh5PtzYD6BWpQaG2BUaNg4Rl5hyJSc9KuUPYo8KdmNh6I3H13yuPfAywn7h5aBny6nzK/Bt6fbJ9KnAykxoS2Fpi3kGjsuLxDEak5qQaLzezrZnY5cHAISQDiAeWZZrYe2AG0m9nNvQsky2B2mNkvgYfd/RdDOL5UgbDrWdiymeh0rU0skoe0XUNrgFcC/ztp1NcA33P3vcVe5O77gRV9dl/TT7mrU8YhVSi0PQRAtOT5+QYiUqPSdg19G/g2gJktIb6n4MvAxKwCkxrS2gITJsEszXwukoe0N5SNIr6a5xXEl4A+TpwMRI5LKBQIv11LtORsojrd6C6Sh7RdQ48DPyYe9L3R3fdkF5LUlC3t0LkLdDexSG7SJoK57r4v00ikJoXWFogiosUaKBbJS6pzcSUByUpoWwunzCOaMGnwwiKSCXXKSm7Cnk7YvFGTzInkbMCuITP7D3d/TbJ9H8n0Er25+7IMY5Nqt2E9FApajUwkZ8XGCD7Va/uGjOOQGhTaWqBxLMyZn3coIjVtwETg7j/ttf0/5QlHakUIIU4Ei5YS1ae9ZkFEsqAxAsnHHx6HHR0aHxAZAdLONdTY5/FkM3t9NiFJLdBqZCIjR9ozgt/3efws8LkSxyI1JLS2wIxZRFOObxEaETl+RTtnzeyUZHOUmc0CouTxXGAos5CKHBb274dNrUQXvjLvUESEwe8sPjRIPDHZPpQItgOaMVSG55FW6D6ou4lFRoiiicDd5wCY2XZ3n1uekKTahdYWGN0A8xfnHYqIkH6M4MZMo5CaEtpaYMESooYT8g5FREg/19CtWQcitSF0PAXbnlC3kMgIovsIpKyOXDaq1chERopicw1d4+43J9vX91fG3dVlJEMSWltgyjSYPjPvUEQkUeyMIOqz3d+PSGqhuxs2riNafBZRpD8fkZGi2FxDn+q1/eHyhCNVbfNG2LdXdxOLjDAaI5CyCa0tMGoULDwj71BEpJchJwIzqzezaVkEI9UttK2FuQuIxo7LOxQR6SXV/L9m9k7gFcAbgbXADDO71d0/mGVwUj3CrmdhSzvRq1fmHYqI9JH2jODDxFNKXArcDcwC3pFVUFJ9QttDAERLdNmoyEiTNhFEwF5gOXAX0IOuGpKhaGuBCZNg1py8IxGRPtImgs8BTwHnEE8+dy/wpayCkuoSCgVC29r4stE6XZ8gMtKknWLiI0AzcJa77wdWuvvfZRqZVI8t7dC5C3TZqMiINJTFYpuBt5hZBPwgo3ikCh2eVuL0M/MNRET6lXapyjcD3wdmEw8Uf8/M3pRlYFI9QmsLzD6VaOKJeYciIv1Ie0ZwA/Aid98KYGY3A/cDX8soLqkSYU8XbN5I9PLX5h2KiAxgKF1DvaW6YsjMxgBriM8i1gOr3D0MUPZ9wKXufvEwY5KRaOM6KBQ07bTICJb2Eo4PAT8zs8+Z2eeAnwJ/n+J1K4Gt7r4UOAm4pL9CZjYbeEvKWKSChNYWaBwLcxfkHYqIDCDtVUNfB14K/Db5We7u30jx0mXAD5Pte4GLBij3GeC6NLFI5QghxKuRLVpKVD/ck08RyVrR/51mdg5wAVAA7nX3zw7x+FOAncn2LuCYr4VmdiWwjjjBDBTHVcBVAO5OU1PTEMOI1dfXD/u1lSrPOnc//hjP7OhgwuvfxtgyxqDPuTaoziU87kBPmNn/At4KfC/Z9S0z+7S7f34Ix+8AJiXbk5LHfa0ATgFeBiwws7/sm3DcfTWwOnkYOjr6O8zgmpqaGO5rK1WedS7cfw8AXbPns6eMMehzrg2q89A0NzcP+FyxM4K/As509+0AZvZPwI+AoSSCe4inpbiTuJvo030LuPuVyfGfC/zLMM46ZIQKrS0wYxbRFE1WKzKSFRsjaDiUBADc/QlgqPMH3wHMNLP1wA6gPbn0VKpcOLAfHmnT1UIiFaDYGcEEM+s7IHxi732Hvs0PJJmOYkWf3dcMUPYxQJeOVotNrXDwgFYjE6kAxRLBu/rZp6klJJXQ2gKjG2D+4rxDEZFBFFuz+F/LGYhUl9DWAvMXEzWckHcoIjIIzQksJRc6noJtTxAtUbeQSCVQIpCSOzzb6GKtRiZSCZQIpORCawtMngrTZ+YdioikoEQgJRW6u2HjOqIlZxNFWs1UpBIoEUhpbd4I+/bqslGRCpJ6JjAzm0o8V9AvgAXu/pvMopKKFVpbYNQoWHhG3qGISEppVyh7O7AW+E+gEfhPM/vrDOOSChXa1sLcBURjh3oTuojkJW3X0A3AmcB+d98JnMUAdwhL7Qq7noUt7eoWEqkwaRPBPuAAcGh1sUagO5OIpGKFtocAiJboslGRSpI2EXwceIB4/qHbgAeBD2cWlVSmthaYMAlmzck7EhEZgrQrlH0FeD3xKmIbgRXJPhEAQqFAaFtLtPgsojpdjCZSSdIOFr8EaCJegH4dMDnZJxLb0g6du0DjAyIVJ+3lo4e6gSJgJjCHuKvogiyCkspzeFqJ08/MNxARGbJUicDdj1p03sxWoLUDpJfQ2gKzTyWaeGLeoYjIEA2rM9fd7yK+hFSEsKcLNm/UZaMiFSrVGYGZfYUjl44CzCbuJhKBjeugUNCylCIVKu0YwY/6PN4F/L/ShiKVKrS2QONYmLsg71BEZBjSjhFotTLpVwghXo1s0VKi+tRTV4nICJL28tGvmJkmj5FjbdsKOzrULSRSwdIOFs8GlmYZiFSm0NoCoIFikQqW9lz+I8AtZvZJ4OeHdrr7lkyikooRWltgxiyiKdPyDkVEhiltIvhy8u9NvfYFYG5pw5FKEg7sh0faiC54ed6hiMhxSDtYrFnE5FibWuHgAXULiVS4AccIzOzCMsYhFSi0tsDoBpi/OO9QROQ4FBss9rJFIRUptK2F+YuJGk7IOxQROQ7FuoYazeyqYi9299UljkcqROh4CrZtJbrgZXmHIiLHqVgiqAfOZeCpJAKgRFCjDs82ulirkYlUumKJoNPd31a2SKSihLYWmDwVps/MOxQROU7FxghuKvKc1LDQ3Q0b1hEtOZso0tyDIpVuwETg7p8qZyBSQTZvhH17ddmoSJXIbJYwMxsDrAFmES9xucrdQ58yEXA7sAB4GrjC3buziklKI7Sthbo6WHhG3qGISAlkucr4SmCruy8FTgIu6afMeUC9u58LTASWZxiPlEhobYF5C4nGah5CkWqQ5bzBy4A7k+17gYuAu/uUeQr4TLJ9YKADJZexXgXg7jQ1NQ0roPr6+mG/tlKVus49f9xBx5Z2xr/xXYwbob9Lfc61QXUu4XFLfsQjpgA7k+1dxN0/R3H3RwDM7DVAA/CD/g6U3K9w6FLV0NHRMayAmpqaGO5rK1Wp61z42X0A7JmzgL0j9Hepz7k2qM5D09zcPOBzWXYNdQCTku1JyeNjmNmrgPcCl7l7T4bxSCm0tsCESTBL8w2KVIssE8E9HOnzXwbc17eAmU0HPgBc6u67M4xFSiAUCoS2tUSLzyKqy/JPR0TKKcv/zXcAM81sPbADaDezm/uUeTMwA/iBmd1vZrqBbSR7fDN07gKtRiZSVTIbI3D3/cCKPruv6VPmk8Ans4pBSuvwamSnKxGIVBOd30tqobUFZp9KNPHEvEMRkRJSIpBUwp4u2LxRi9SLVCElAkln4zooFDSthEgVUiKQVEJrCzSOhbnH3A4iIhVOiUAGFUKI5xdaeAZRfZb3IIpIHpQIZHDbtsKO7URL1C0kUo2UCGRQhy8b1fiASFVSIpBBhbYWmH4y0ZRpeYciIhlQIpCiwoH9sKlN3UIiVUyJQIrb1AoHD6hbSKSKKRFIUaFtLYxugPmL8w5FRDKiRCBFhdYWmL+YqOGEvEMRkYwoEciAwjNPw7atGh8QqXJKBDKg0KbLRkVqgRKBDCi0tsDkqTD95LxDEZEMKRFIv0J3N2xYR7TkbKIoyjscEcmQJo4RILlf4LFHCO0bCe0boX0D7NtL9Lzn5x2aiGRMiaBGhWefgfYNRxr+Le3Q0xM/OX0m0dJzYOFSWPrCfAMVkcwpEdSA0NMDWx8jtG+AQw3/M0/HT45ugDmnES1/NdG802HuAqIJE/MNWETKSomgCoWuTtj8MKF9A89uaaewqQ3274ufPHEK0amL4OJXEc1bBLOeS1Q/Ot+ARSRXSgQVLoQATz15uF8/PLoB/vB4/GRdHYU584nOuxjmLYwb/slNGvwVkaMoEVSYeFD3UULSv0/7BujcHT85dhzMW0T0wguI5i2E557GlJNn0dHRkW/QIjKiKRGMcOGPz8T9+o9uGHhQd96iuOGffjJRna4IFpGhUSIYQTSoKyJ5UCLIUe9B3dC+EX63qdeg7uS4T1+DuiKSMSWCMjlmULd9Izy5JX6yrg5mzdWgrojkQokgI0cGdTce7uqhc1f85KFB3XNecnhQNxrTmG/AIlKzlAhK5MigbtLwHzOo+yca1BWREUmJYBhCTw888Vh8zX7RQd1FMHehBnVFZERTIkgh7OmEdg3qikh1UiLoY9BB3ZPnaFBXRKpKZonAzMYAa4BZwHpglbuHoZbJmgZ1RaTWZXlGsBLY6u4rzOwu4BLg7mGUKaljB3U3Q093/KQGdUWkBmWZCJYBdybb9wIXcWwjn6ZMSYT1v2T7t75IYfu2eMfhQd3LNagrIjUty0QwBdiZbO8CFgyzDGZ2FXAVgLvT1NQ05GAOzp7L3vmLGXXZ62lY+Dzqn3sa0ejqH9Str68f1u+rkqnOtUF1LuFxS37EIzqAScn2pOTxcMrg7quB1cnDMKzZNCdNoemaj9DR0cFegJ07B3tFVWhqaqq52UdV59qgOg9Nc3PzgM9l2QF+D7A82V4G3DfMMiIikqEsE8EdwEwzWw/sANrN7OZBytyTYTwiItKPzLqG3H0/sKLP7mtSlBERkTLStZEiIjVOiUBEpMYpEYiI1DglAhGRGqdEICJS46IQyjrHWylUXMAiIiNEv1MlV+IZQTTcHzP79fG8vhJ/VOfa+FGda+OnBHXuVyUmAhERKSElAhGRGldriWD14EWqjupcG1Tn2pBJnStxsFhEREqo1s4IRESkDyUCEZEal+XCNLkwszHAGmAWsB5Y5e5hqGUqSco6R8DtxKvAPQ1c4e7dZQ61ZIbyGZrZ+4BL3f3iMoZYcmnrbGbXApcBncDl7n6grIGWUMq/7XHAN4Am4AF3v7bsgZaYmY0G/t3dLxvg+ZK2YdV4RrAS2OruS4GTgEuGWaaSpKnPeUC9u58LTOTIgkCVKtVnaGazgbeUMa4sDVpnM5sLLHb3FwPfB04ub4gll+ZzfiPwM3c/D1hsZovKGWCpmVkj8GuKt0slbcOqMREsA36YbN8LXDTMMpUkTX2eAj6TbFfsN8Re0n6GnwGuK0tE2UtT55cCJ5nZj4EXA78rU2xZSVPn/cDY5Kx3DBX+9+3ue939DGBrkWIlbcOqMRFMAXYm27uAycMsU0kGrY+7P+LuvzCz1wANwA/KGF8WBq2zmV0JrAN+W8a4spTm73YqsN3dX0J8NnB+mWLLSpo6fwN4BbAB2Oju7WWKLU8lbcOqMRF0AJOS7UnJ4+GUqSSp6mNmrwLeC1zm7j1lii0raeq8gvgb8reA55vZX5YptqykqfMu4OFkezMwswxxZSlNna8DPu/uC4HJZvaicgWXo5K2YdWYCO7hSP/3MuC+YZapJIPWx8ymAx8gHjTdXcbYsjJond39Snc/H3gD8Gt3/2wZ48tCmr/bXwN/kmyfSpwMKlmaOk8A9iXb+4HxZYgrbyVtw6oxEdwBzDSz9cAOoN3Mbh6kzD1ljrHU0tT5zcAM4Admdr+Zva3cQZZYmjpXm0Hr7O4PAh1m9kvgYXf/RQ5xllKaz/k24GozexBopPL/Px/FzOZk3YbpzmIRkRpXjWcEIiIyBEoEIiI1TolARKTGKRGIiNS4qptrSEYmM3sL8AWg96WrN7n7TYO87gYAd78ho3g6ie9E/Yy7f+I4jnctwGD16VX+POBad798uO85wHGfS3zJ6A5gFPBj4G3u/kwp30eqixKBlNN/uPsb8g6il/9w9zeY2TTgJ2b2I3f/2XAONFACMLPHgAvd/bE+5R8ASpoEenna3aebWQPxRIMfBN5X7AVmdjvwI3e/PaOYZART15DUPHd/GvgecEHesZRSMuvoGuIZZ0UGpDMCyZ2ZXQ9cDfQA17n71wYp/yHg3cnDf3D3LyT73wr8PfFNRTe4+xeHGEohOc5K4KNAlBz/9mLvmzx3AxzpwjKzvwKuJ54ZssXMCsBsd+9Knr8wifHC5HEjcZfOKe5+MJkT6nXufqWZnQZ8CZgPPAC8yd33DFaZZCrjy4CNyeM/Bb4ITAP+B/hzYCnxvFPjgT9Lbly60t3vNrPnJO/7fOL5mv48SZpSZXRGIOV0uZltS35uBDCzU4ALiRu5c4FPFTuAmU0mbuwXAmcSTzaGmS0G/gZ4QbL/hqQhG5SZzSSel+heM1sIfJL47OB84CNm9ryB3ncg7n6LuzcBjwNnu3vToSQwQPm9wE84MkncK4i/zQN8DfgY8Z3hu4F3DVKlqWa2LSnbTJzUAN4B/C3wHOJpGZa7+6+TOL8FvCeJ8+6k/C3Ad919BnB/Un+pQkoEUk7fcffpyc/1AO6+hXgivPcBXyVupIr5I7AJuJl4muU3JvuXAXOIv/3+hvgb7mBdIpcnDeaPiQeLD80B/113/727Pw78O/GcLgO9bymt4UiCeTHwfTObAJwD/CvwB+KEtXCQ42x39+nE4wO/cvcdyf73EyeGrwJ/SnxmUMzFwI3J7+gvUBdT1VIikFyZ2fnEje0jwJsGK+/uBeKGcQ3wEuJulwbibpyvHko0wGxgsHl2DiWmee5+2wBlAhAVed9S+h5woZk9D/hNcpYQAft61Wsm8bf6NG4F3m5mDWZWBzwITCdeo+HbKV4fAWck7zuDeDEUqUJKBJK3c4EW4N+A1w5W2MzmE3+Df4C4q6KZeC72+4BLzazZzE4EHmJ432D/G1hhZqckXUZXEE/UN9D7DqYDmGNmdWY2pVjBpOvoceKunzXJvl1Am5m9OSl2E/ChNBVx9zagDXhdEus84u6ePRy7olUH8RkVZjY12XcPR7qh/gpYneZ9pfIoEUje1gCnA08CzwU6k0a3X+6+iXhFpnbgUeCz7r7N3X8DfJj4W+9vgVvdfd1Qg3H3DcTfuH8M/BS43t1/M9D7pjjk9cRdNM+QbnnQO4mX1vxer30rgXea2XbiqaVvTFWZ2C3Au929g7h7aTPweeBXxOMyh9wGvMrMdgD/kOx7D3Bu8r5XMMglqFK5NPuoiEiN0xmBiEiNUyIQEalxSgQiIjVOiUBEpMYpEYiI1DglAhGRGqdEICJS4/4/7sl/Y8QMHOgAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "display = metrics.RocCurveDisplay(fpr=fpr, tpr=tpr)\n",
    "display.plot()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "72f1305c",
   "metadata": {},
   "source": [
    "# 可视化树"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "id": "2648fb27",
   "metadata": {},
   "outputs": [],
   "source": [
    "import graphviz\n",
    "from sklearn import tree"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "2ce1bce1",
   "metadata": {},
   "outputs": [],
   "source": [
    "dot_data = tree.export_graphviz(best_cart,\n",
    "                                out_file = None,\n",
    "                                feature_names=Xtrain.columns,\n",
    "                                class_names=['漏电', '没漏电'],\n",
    "                                filled=True,\n",
    "                                rounded=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "id": "bed7283b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 2.38.0 (20140413.2041)\n",
       " -->\n",
       "<!-- Title: Tree Pages: 1 -->\n",
       "<svg width=\"1044pt\" height=\"433pt\"\n",
       " viewBox=\"0.00 0.00 1043.50 433.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 429)\">\n",
       "<title>Tree</title>\n",
       "<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-429 1039.5,-429 1039.5,4 -4,4\"/>\n",
       "<!-- 0 -->\n",
       "<g id=\"node1\" class=\"node\"><title>0</title>\n",
       "<path fill=\"#ffffff\" stroke=\"black\" d=\"M591.5,-425C591.5,-425 443.5,-425 443.5,-425 437.5,-425 431.5,-419 431.5,-413 431.5,-413 431.5,-354 431.5,-354 431.5,-348 437.5,-342 443.5,-342 443.5,-342 591.5,-342 591.5,-342 597.5,-342 603.5,-348 603.5,-354 603.5,-354 603.5,-413 603.5,-413 603.5,-419 597.5,-425 591.5,-425\"/>\n",
       "<text text-anchor=\"middle\" x=\"517.5\" y=\"-409.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">电量趋势下降指标 &lt;= 4.5</text>\n",
       "<text text-anchor=\"middle\" x=\"517.5\" y=\"-394.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">gini = 0.5</text>\n",
       "<text text-anchor=\"middle\" x=\"517.5\" y=\"-379.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 203</text>\n",
       "<text text-anchor=\"middle\" x=\"517.5\" y=\"-364.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [101.5, 101.5]</text>\n",
       "<text text-anchor=\"middle\" x=\"517.5\" y=\"-349.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">class = 没漏电</text>\n",
       "</g>\n",
       "<!-- 1 -->\n",
       "<g id=\"node2\" class=\"node\"><title>1</title>\n",
       "<path fill=\"#7dbfee\" stroke=\"black\" d=\"M499,-306C499,-306 356,-306 356,-306 350,-306 344,-300 344,-294 344,-294 344,-235 344,-235 344,-229 350,-223 356,-223 356,-223 499,-223 499,-223 505,-223 511,-229 511,-235 511,-235 511,-294 511,-294 511,-300 505,-306 499,-306\"/>\n",
       "<text text-anchor=\"middle\" x=\"427.5\" y=\"-290.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">告警类指标 &lt;= 3.5</text>\n",
       "<text text-anchor=\"middle\" x=\"427.5\" y=\"-275.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">gini = 0.38</text>\n",
       "<text text-anchor=\"middle\" x=\"427.5\" y=\"-260.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 166</text>\n",
       "<text text-anchor=\"middle\" x=\"427.5\" y=\"-245.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [31.719, 92.596]</text>\n",
       "<text text-anchor=\"middle\" x=\"427.5\" y=\"-230.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">class = 没漏电</text>\n",
       "</g>\n",
       "<!-- 0&#45;&gt;1 -->\n",
       "<g id=\"edge1\" class=\"edge\"><title>0&#45;&gt;1</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M486.275,-341.907C479.364,-332.923 471.973,-323.315 464.846,-314.05\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"467.541,-311.813 458.67,-306.021 461.993,-316.081 467.541,-311.813\"/>\n",
       "<text text-anchor=\"middle\" x=\"455.436\" y=\"-327.111\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">True</text>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node7\" class=\"node\"><title>6</title>\n",
       "<path fill=\"#e89152\" stroke=\"black\" d=\"M676,-306C676,-306 541,-306 541,-306 535,-306 529,-300 529,-294 529,-294 529,-235 529,-235 529,-229 535,-223 541,-223 541,-223 676,-223 676,-223 682,-223 688,-229 688,-235 688,-235 688,-294 688,-294 688,-300 682,-306 676,-306\"/>\n",
       "<text text-anchor=\"middle\" x=\"608.5\" y=\"-290.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">线损指标 &lt;= 0.5</text>\n",
       "<text text-anchor=\"middle\" x=\"608.5\" y=\"-275.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">gini = 0.201</text>\n",
       "<text text-anchor=\"middle\" x=\"608.5\" y=\"-260.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 37</text>\n",
       "<text text-anchor=\"middle\" x=\"608.5\" y=\"-245.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [69.781, 8.904]</text>\n",
       "<text text-anchor=\"middle\" x=\"608.5\" y=\"-230.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">class = 漏电</text>\n",
       "</g>\n",
       "<!-- 0&#45;&gt;6 -->\n",
       "<g id=\"edge6\" class=\"edge\"><title>0&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M549.072,-341.907C556.06,-332.923 563.533,-323.315 570.739,-314.05\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"573.607,-316.063 576.984,-306.021 568.082,-311.766 573.607,-316.063\"/>\n",
       "<text text-anchor=\"middle\" x=\"580.085\" y=\"-327.128\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">False</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node3\" class=\"node\"><title>2</title>\n",
       "<path fill=\"#62b1ea\" stroke=\"black\" d=\"M327.5,-187C327.5,-187 179.5,-187 179.5,-187 173.5,-187 167.5,-181 167.5,-175 167.5,-175 167.5,-116 167.5,-116 167.5,-110 173.5,-104 179.5,-104 179.5,-104 327.5,-104 327.5,-104 333.5,-104 339.5,-110 339.5,-116 339.5,-116 339.5,-175 339.5,-175 339.5,-181 333.5,-187 327.5,-187\"/>\n",
       "<text text-anchor=\"middle\" x=\"253.5\" y=\"-171.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">电量趋势下降指标 &lt;= 3.5</text>\n",
       "<text text-anchor=\"middle\" x=\"253.5\" y=\"-156.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">gini = 0.283</text>\n",
       "<text text-anchor=\"middle\" x=\"253.5\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 162</text>\n",
       "<text text-anchor=\"middle\" x=\"253.5\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [19.031, 92.596]</text>\n",
       "<text text-anchor=\"middle\" x=\"253.5\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">class = 没漏电</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge2\" class=\"edge\"><title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M367.132,-222.907C352.691,-213.197 337.166,-202.758 322.373,-192.811\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"324.013,-189.696 313.762,-187.021 320.107,-195.505 324.013,-189.696\"/>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node6\" class=\"node\"><title>5</title>\n",
       "<path fill=\"#e58139\" stroke=\"black\" d=\"M489.5,-179.5C489.5,-179.5 369.5,-179.5 369.5,-179.5 363.5,-179.5 357.5,-173.5 357.5,-167.5 357.5,-167.5 357.5,-123.5 357.5,-123.5 357.5,-117.5 363.5,-111.5 369.5,-111.5 369.5,-111.5 489.5,-111.5 489.5,-111.5 495.5,-111.5 501.5,-117.5 501.5,-123.5 501.5,-123.5 501.5,-167.5 501.5,-167.5 501.5,-173.5 495.5,-179.5 489.5,-179.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"429.5\" y=\"-164.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">gini = 0.0</text>\n",
       "<text text-anchor=\"middle\" x=\"429.5\" y=\"-149.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 4</text>\n",
       "<text text-anchor=\"middle\" x=\"429.5\" y=\"-134.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [12.688, 0.0]</text>\n",
       "<text text-anchor=\"middle\" x=\"429.5\" y=\"-119.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">class = 漏电</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;5 -->\n",
       "<g id=\"edge5\" class=\"edge\"><title>1&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M428.194,-222.907C428.377,-212.204 428.575,-200.615 428.76,-189.776\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"432.262,-189.725 428.933,-179.667 425.263,-189.606 432.262,-189.725\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node4\" class=\"node\"><title>3</title>\n",
       "<path fill=\"#4aa5e7\" stroke=\"black\" d=\"M147,-68C147,-68 12,-68 12,-68 6,-68 0,-62 0,-56 0,-56 0,-12 0,-12 0,-6 6,-0 12,-0 12,-0 147,-0 147,-0 153,-0 159,-6 159,-12 159,-12 159,-56 159,-56 159,-62 153,-68 147,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"79.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">gini = 0.145</text>\n",
       "<text text-anchor=\"middle\" x=\"79.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 127</text>\n",
       "<text text-anchor=\"middle\" x=\"79.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [6.344, 74.196]</text>\n",
       "<text text-anchor=\"middle\" x=\"79.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">class = 没漏电</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge3\" class=\"edge\"><title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M188.709,-103.726C172.974,-93.8245 156.201,-83.269 140.642,-73.4774\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"142.465,-70.4892 132.137,-68.1252 138.737,-76.4137 142.465,-70.4892\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node5\" class=\"node\"><title>4</title>\n",
       "<path fill=\"#c2e1f7\" stroke=\"black\" d=\"M332,-68C332,-68 189,-68 189,-68 183,-68 177,-62 177,-56 177,-56 177,-12 177,-12 177,-6 183,-0 189,-0 189,-0 332,-0 332,-0 338,-0 344,-6 344,-12 344,-12 344,-56 344,-56 344,-62 338,-68 332,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"260.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">gini = 0.483</text>\n",
       "<text text-anchor=\"middle\" x=\"260.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 35</text>\n",
       "<text text-anchor=\"middle\" x=\"260.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [12.688, 18.401]</text>\n",
       "<text text-anchor=\"middle\" x=\"260.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">class = 没漏电</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;4 -->\n",
       "<g id=\"edge4\" class=\"edge\"><title>2&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M256.107,-103.726C256.637,-95.4263 257.197,-86.6671 257.733,-78.2834\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"261.226,-78.5025 258.371,-68.2996 254.24,-78.0559 261.226,-78.5025\"/>\n",
       "</g>\n",
       "<!-- 7 -->\n",
       "<g id=\"node8\" class=\"node\"><title>7</title>\n",
       "<path fill=\"#fdf7f2\" stroke=\"black\" d=\"M681.5,-187C681.5,-187 533.5,-187 533.5,-187 527.5,-187 521.5,-181 521.5,-175 521.5,-175 521.5,-116 521.5,-116 521.5,-110 527.5,-104 533.5,-104 533.5,-104 681.5,-104 681.5,-104 687.5,-104 693.5,-110 693.5,-116 693.5,-116 693.5,-175 693.5,-175 693.5,-181 687.5,-187 681.5,-187\"/>\n",
       "<text text-anchor=\"middle\" x=\"607.5\" y=\"-171.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">电量趋势下降指标 &lt;= 6.5</text>\n",
       "<text text-anchor=\"middle\" x=\"607.5\" y=\"-156.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">gini = 0.499</text>\n",
       "<text text-anchor=\"middle\" x=\"607.5\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 12</text>\n",
       "<text text-anchor=\"middle\" x=\"607.5\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [6.344, 5.936]</text>\n",
       "<text text-anchor=\"middle\" x=\"607.5\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">class = 漏电</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;7 -->\n",
       "<g id=\"edge7\" class=\"edge\"><title>6&#45;&gt;7</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M608.153,-222.907C608.082,-214.649 608.007,-205.864 607.934,-197.302\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"611.432,-196.99 607.846,-187.021 604.432,-197.05 611.432,-196.99\"/>\n",
       "</g>\n",
       "<!-- 10 -->\n",
       "<g id=\"node11\" class=\"node\"><title>10</title>\n",
       "<path fill=\"#e68742\" stroke=\"black\" d=\"M871.5,-187C871.5,-187 723.5,-187 723.5,-187 717.5,-187 711.5,-181 711.5,-175 711.5,-175 711.5,-116 711.5,-116 711.5,-110 717.5,-104 723.5,-104 723.5,-104 871.5,-104 871.5,-104 877.5,-104 883.5,-110 883.5,-116 883.5,-116 883.5,-175 883.5,-175 883.5,-181 877.5,-187 871.5,-187\"/>\n",
       "<text text-anchor=\"middle\" x=\"797.5\" y=\"-171.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">电量趋势下降指标 &lt;= 5.5</text>\n",
       "<text text-anchor=\"middle\" x=\"797.5\" y=\"-156.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">gini = 0.085</text>\n",
       "<text text-anchor=\"middle\" x=\"797.5\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 25</text>\n",
       "<text text-anchor=\"middle\" x=\"797.5\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [63.438, 2.968]</text>\n",
       "<text text-anchor=\"middle\" x=\"797.5\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">class = 漏电</text>\n",
       "</g>\n",
       "<!-- 6&#45;&gt;10 -->\n",
       "<g id=\"edge10\" class=\"edge\"><title>6&#45;&gt;10</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M674.073,-222.907C689.905,-213.106 706.937,-202.563 723.14,-192.533\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"725.383,-195.26 732.043,-187.021 721.698,-189.308 725.383,-195.26\"/>\n",
       "</g>\n",
       "<!-- 8 -->\n",
       "<g id=\"node9\" class=\"node\"><title>8</title>\n",
       "<path fill=\"#399de5\" stroke=\"black\" d=\"M505.5,-68C505.5,-68 393.5,-68 393.5,-68 387.5,-68 381.5,-62 381.5,-56 381.5,-56 381.5,-12 381.5,-12 381.5,-6 387.5,-0 393.5,-0 393.5,-0 505.5,-0 505.5,-0 511.5,-0 517.5,-6 517.5,-12 517.5,-12 517.5,-56 517.5,-56 517.5,-62 511.5,-68 505.5,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"449.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">gini = &#45;0.0</text>\n",
       "<text text-anchor=\"middle\" x=\"449.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 8</text>\n",
       "<text text-anchor=\"middle\" x=\"449.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [0.0, 4.749]</text>\n",
       "<text text-anchor=\"middle\" x=\"449.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">class = 没漏电</text>\n",
       "</g>\n",
       "<!-- 7&#45;&gt;8 -->\n",
       "<g id=\"edge8\" class=\"edge\"><title>7&#45;&gt;8</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M548.667,-103.726C534.644,-94.0078 519.712,-83.6597 505.806,-74.0222\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"507.51,-70.9447 497.297,-68.1252 503.523,-76.6981 507.51,-70.9447\"/>\n",
       "</g>\n",
       "<!-- 9 -->\n",
       "<g id=\"node10\" class=\"node\"><title>9</title>\n",
       "<path fill=\"#ea995e\" stroke=\"black\" d=\"M675.5,-68C675.5,-68 547.5,-68 547.5,-68 541.5,-68 535.5,-62 535.5,-56 535.5,-56 535.5,-12 535.5,-12 535.5,-6 541.5,-0 547.5,-0 547.5,-0 675.5,-0 675.5,-0 681.5,-0 687.5,-6 687.5,-12 687.5,-12 687.5,-56 687.5,-56 687.5,-62 681.5,-68 675.5,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"611.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">gini = 0.266</text>\n",
       "<text text-anchor=\"middle\" x=\"611.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 4</text>\n",
       "<text text-anchor=\"middle\" x=\"611.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [6.344, 1.187]</text>\n",
       "<text text-anchor=\"middle\" x=\"611.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">class = 漏电</text>\n",
       "</g>\n",
       "<!-- 7&#45;&gt;9 -->\n",
       "<g id=\"edge9\" class=\"edge\"><title>7&#45;&gt;9</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M608.989,-103.726C609.289,-95.5175 609.606,-86.8595 609.909,-78.56\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"613.416,-78.4207 610.284,-68.2996 606.421,-78.1651 613.416,-78.4207\"/>\n",
       "</g>\n",
       "<!-- 11 -->\n",
       "<g id=\"node12\" class=\"node\"><title>11</title>\n",
       "<path fill=\"#e78b48\" stroke=\"black\" d=\"M861,-68C861,-68 726,-68 726,-68 720,-68 714,-62 714,-56 714,-56 714,-12 714,-12 714,-6 720,-0 726,-0 726,-0 861,-0 861,-0 867,-0 873,-6 873,-12 873,-12 873,-56 873,-56 873,-62 867,-68 861,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"793.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">gini = 0.134</text>\n",
       "<text text-anchor=\"middle\" x=\"793.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 17</text>\n",
       "<text text-anchor=\"middle\" x=\"793.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [38.062, 2.968]</text>\n",
       "<text text-anchor=\"middle\" x=\"793.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">class = 漏电</text>\n",
       "</g>\n",
       "<!-- 10&#45;&gt;11 -->\n",
       "<g id=\"edge11\" class=\"edge\"><title>10&#45;&gt;11</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M796.011,-103.726C795.711,-95.5175 795.394,-86.8595 795.091,-78.56\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"798.579,-78.1651 794.716,-68.2996 791.584,-78.4207 798.579,-78.1651\"/>\n",
       "</g>\n",
       "<!-- 12 -->\n",
       "<g id=\"node13\" class=\"node\"><title>12</title>\n",
       "<path fill=\"#e58139\" stroke=\"black\" d=\"M1023.5,-68C1023.5,-68 903.5,-68 903.5,-68 897.5,-68 891.5,-62 891.5,-56 891.5,-56 891.5,-12 891.5,-12 891.5,-6 897.5,-0 903.5,-0 903.5,-0 1023.5,-0 1023.5,-0 1029.5,-0 1035.5,-6 1035.5,-12 1035.5,-12 1035.5,-56 1035.5,-56 1035.5,-62 1029.5,-68 1023.5,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"963.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">gini = 0.0</text>\n",
       "<text text-anchor=\"middle\" x=\"963.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 8</text>\n",
       "<text text-anchor=\"middle\" x=\"963.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [25.375, 0.0]</text>\n",
       "<text text-anchor=\"middle\" x=\"963.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">class = 漏电</text>\n",
       "</g>\n",
       "<!-- 10&#45;&gt;12 -->\n",
       "<g id=\"edge12\" class=\"edge\"><title>10&#45;&gt;12</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M859.312,-103.726C874.184,-93.9161 890.029,-83.4644 904.756,-73.7496\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"906.863,-76.5532 913.283,-68.1252 903.008,-70.7099 906.863,-76.5532\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.files.Source at 0x16fc5ffa0>"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "graph = graphviz.Source(dot_data)\n",
    "graph"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
